/**
*动画类,根据2d动画来控制3d动画,
*3d.x=2d.x
*3d.z=-2d.y
*3d._yrotation=2d.rotation
*
*这个是用我自己的弹性函数来控制的
*
*!!这个存在的问题是使用自己的K的话这个东西运动的时候会抖~
*/

package kgame5.k3d.util3d {
import kgame5.k3d.core.obj3d.node3d.Node3D;
import kgame5.k3d.util3d.*;
import kgame5.kmath.MathDG;

import flash.display.*;
import flash.events.*;

public class AnimTrack3D_K extends AnimTrack3D{ 
	//____________________Property______________________
	
	
	private var 
		iStartFrameIdx:int,//动画开始的真
		iEndFrameIdx:int;//结束的真
		
	private var md:Node3D;//本次运动的模型
	
	private var bOK:Boolean=false;
	
	private var aimX:Number,aimZ:Number,aimRot:Number;
	
	private var K:Number=3;//弹簧系数
	//____________________Method____________________
	public function AnimTrack3D_K(p_mc_track:MovieClip,p_K:Number=3){
		
		super(p_mc_track);
		
		K=p_K;
	}
	//把一个md放在mc标志的位置
	override public function place(p_md:Node3D,iAimFrameIdx:int){
		//目标位置
		mc_track.gotoAndStop(iAimFrameIdx);
		p_md.x=mc_track.mc.x;
		p_md.z=-mc_track.mc.y;
		p_md.rotY= mc_track.mc.rotation;
		
		mc_track.removeEventListener(Event.ENTER_FRAME, efh);
		
		bOK=false;
	}
	override public function start(p_md:Node3D,p_startFrameIdx:int,p_endFrameIdx:int){
		md=p_md;
		
		iStartFrameIdx=p_startFrameIdx;
		iEndFrameIdx=p_endFrameIdx;
		
		//初始化的位置,摆在开始的位置
		mc_track.gotoAndStop(iStartFrameIdx);
		md.x=mc_track.mc.x;
		md.z=-mc_track.mc.y;
		md.rotY= mc_track.mc.rotation;
		
		//目标位置
		mc_track.gotoAndStop(iEndFrameIdx);
		aimX=mc_track.mc.x;
		aimZ=-mc_track.mc.y;
		aimRot=mc_track.mc.rotation;
		
		//
		mc_track.removeEventListener(Event.ENTER_FRAME, efh);//一定要把老的山掉!
		mc_track.addEventListener(Event.ENTER_FRAME, efh);
		
		//
		bOK=false;
		
	}
	
	private  function efh(e:Event){
		
		md.x=MathDG.Spring(md.x, aimX, K);
		md.z=MathDG.Spring(md.z, aimZ, K);
		md.rotY=MathDG.Spring(md.rotY, aimRot, K);
		
		if(md.x==aimX
			&&md.z==aimZ
			&&md.rotY==aimRot
			){
			bOK=true;
			mc_track.removeEventListener(Event.ENTER_FRAME, efh);
			
			this.notifyOK();
		}
	}
	
	override public function isOK():Boolean{
		return bOK;
	}
}//end of class
}
///////////////////////////////
/*这个最初是为了解决卡片队列运动的时候有的步调不一致，后来发现原来是Spring函数的问题！！！int和Number在处理微小的东西的时候是需要特别谨慎的
override public function update(){
		if(bOK==false&&md!=null){
			md.v3d_p.x=MathDG.Spring3(md.v3d_p.x, aimX, 3);
			md.v3d_p.z=MathDG.Spring3(md.v3d_p.z, aimZ, 3);
			md._yrotation=MathDG.Spring3(md._yrotation, aimRot, 3);
			
			if(md.v3d_p.x==aimX
				&&md.v3d_p.z==aimZ
				&&md._yrotation==aimRot
				){
					bOK=true;
				}
		}
	}
//*/